{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## import需要使用的库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "\n",
    "from sklearn.preprocessing import MinMaxScaler, LabelEncoder\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import LSTM, Dense, Dropout\n",
    "\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据加载"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "raw_data = pd.read_csv(\"coinbaseUSD_1-min_data_2014-12-01_to_2019-01-09.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看原始数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2099760 entries, 0 to 2099759\n",
      "Data columns (total 8 columns):\n",
      " #   Column             Dtype  \n",
      "---  ------             -----  \n",
      " 0   Timestamp          int64  \n",
      " 1   Open               float64\n",
      " 2   High               float64\n",
      " 3   Low                float64\n",
      " 4   Close              float64\n",
      " 5   Volume_(BTC)       float64\n",
      " 6   Volume_(Currency)  float64\n",
      " 7   Weighted_Price     float64\n",
      "dtypes: float64(7), int64(1)\n",
      "memory usage: 128.2 MB\n"
     ]
    }
   ],
   "source": [
    "raw_data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在的数据一共有2099760条，数据由Timestamp、Open、High、Low、Close、Volume_(BTC)、Volume_(Currency)、Weighted_Price这几列组成。其中除去Timestamp列以外，其余的数据列都是float64数据类型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在查看前10行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Volume_(BTC)</th>\n",
       "      <th>Volume_(Currency)</th>\n",
       "      <th>Weighted_Price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1417411980</td>\n",
       "      <td>300.0</td>\n",
       "      <td>300.0</td>\n",
       "      <td>300.0</td>\n",
       "      <td>300.0</td>\n",
       "      <td>0.01</td>\n",
       "      <td>3.0</td>\n",
       "      <td>300.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1417412040</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1417412100</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1417412160</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1417412220</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1417412280</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1417412340</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1417412400</td>\n",
       "      <td>300.0</td>\n",
       "      <td>300.0</td>\n",
       "      <td>300.0</td>\n",
       "      <td>300.0</td>\n",
       "      <td>0.01</td>\n",
       "      <td>3.0</td>\n",
       "      <td>300.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1417412460</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1417412520</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Timestamp   Open   High    Low  Close  Volume_(BTC)  Volume_(Currency)  \\\n",
       "0  1417411980  300.0  300.0  300.0  300.0          0.01                3.0   \n",
       "1  1417412040    NaN    NaN    NaN    NaN           NaN                NaN   \n",
       "2  1417412100    NaN    NaN    NaN    NaN           NaN                NaN   \n",
       "3  1417412160    NaN    NaN    NaN    NaN           NaN                NaN   \n",
       "4  1417412220    NaN    NaN    NaN    NaN           NaN                NaN   \n",
       "5  1417412280    NaN    NaN    NaN    NaN           NaN                NaN   \n",
       "6  1417412340    NaN    NaN    NaN    NaN           NaN                NaN   \n",
       "7  1417412400  300.0  300.0  300.0  300.0          0.01                3.0   \n",
       "8  1417412460    NaN    NaN    NaN    NaN           NaN                NaN   \n",
       "9  1417412520    NaN    NaN    NaN    NaN           NaN                NaN   \n",
       "\n",
       "   Weighted_Price  \n",
       "0           300.0  \n",
       "1             NaN  \n",
       "2             NaN  \n",
       "3             NaN  \n",
       "4             NaN  \n",
       "5             NaN  \n",
       "6             NaN  \n",
       "7           300.0  \n",
       "8             NaN  \n",
       "9             NaN  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "raw_data.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 删除包含NaN值的任何行，把处理后的数据给data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除包含NaN值的任何行\n",
    "data = raw_data.dropna(axis = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Timestamp</th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Volume_(BTC)</th>\n",
       "      <th>Volume_(Currency)</th>\n",
       "      <th>Weighted_Price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1417411980</td>\n",
       "      <td>300.00</td>\n",
       "      <td>300.0</td>\n",
       "      <td>300.00</td>\n",
       "      <td>300.0</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>3.00000</td>\n",
       "      <td>300.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1417412400</td>\n",
       "      <td>300.00</td>\n",
       "      <td>300.0</td>\n",
       "      <td>300.00</td>\n",
       "      <td>300.0</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>3.00000</td>\n",
       "      <td>300.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>1417415040</td>\n",
       "      <td>370.00</td>\n",
       "      <td>370.0</td>\n",
       "      <td>370.00</td>\n",
       "      <td>370.0</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>3.70000</td>\n",
       "      <td>370.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>1417416600</td>\n",
       "      <td>370.00</td>\n",
       "      <td>370.0</td>\n",
       "      <td>370.00</td>\n",
       "      <td>370.0</td>\n",
       "      <td>0.026556</td>\n",
       "      <td>9.82555</td>\n",
       "      <td>370.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1436</th>\n",
       "      <td>1417498140</td>\n",
       "      <td>377.00</td>\n",
       "      <td>377.0</td>\n",
       "      <td>377.00</td>\n",
       "      <td>377.0</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>3.77000</td>\n",
       "      <td>377.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1766</th>\n",
       "      <td>1417517940</td>\n",
       "      <td>377.75</td>\n",
       "      <td>378.0</td>\n",
       "      <td>377.75</td>\n",
       "      <td>378.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1511.93750</td>\n",
       "      <td>377.984375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1771</th>\n",
       "      <td>1417518240</td>\n",
       "      <td>378.00</td>\n",
       "      <td>378.0</td>\n",
       "      <td>378.00</td>\n",
       "      <td>378.0</td>\n",
       "      <td>4.900000</td>\n",
       "      <td>1852.20000</td>\n",
       "      <td>378.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1772</th>\n",
       "      <td>1417518300</td>\n",
       "      <td>378.00</td>\n",
       "      <td>378.0</td>\n",
       "      <td>378.00</td>\n",
       "      <td>378.0</td>\n",
       "      <td>5.200000</td>\n",
       "      <td>1965.60000</td>\n",
       "      <td>378.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2230</th>\n",
       "      <td>1417545780</td>\n",
       "      <td>378.00</td>\n",
       "      <td>378.0</td>\n",
       "      <td>378.00</td>\n",
       "      <td>378.0</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>37.80000</td>\n",
       "      <td>378.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2245</th>\n",
       "      <td>1417546680</td>\n",
       "      <td>378.00</td>\n",
       "      <td>378.0</td>\n",
       "      <td>378.00</td>\n",
       "      <td>378.0</td>\n",
       "      <td>0.793600</td>\n",
       "      <td>299.98080</td>\n",
       "      <td>378.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Timestamp    Open   High     Low  Close  Volume_(BTC)  \\\n",
       "0     1417411980  300.00  300.0  300.00  300.0      0.010000   \n",
       "7     1417412400  300.00  300.0  300.00  300.0      0.010000   \n",
       "51    1417415040  370.00  370.0  370.00  370.0      0.010000   \n",
       "77    1417416600  370.00  370.0  370.00  370.0      0.026556   \n",
       "1436  1417498140  377.00  377.0  377.00  377.0      0.010000   \n",
       "1766  1417517940  377.75  378.0  377.75  378.0      4.000000   \n",
       "1771  1417518240  378.00  378.0  378.00  378.0      4.900000   \n",
       "1772  1417518300  378.00  378.0  378.00  378.0      5.200000   \n",
       "2230  1417545780  378.00  378.0  378.00  378.0      0.100000   \n",
       "2245  1417546680  378.00  378.0  378.00  378.0      0.793600   \n",
       "\n",
       "      Volume_(Currency)  Weighted_Price  \n",
       "0               3.00000      300.000000  \n",
       "7               3.00000      300.000000  \n",
       "51              3.70000      370.000000  \n",
       "77              9.82555      370.000000  \n",
       "1436            3.77000      377.000000  \n",
       "1766         1511.93750      377.984375  \n",
       "1771         1852.20000      378.000000  \n",
       "1772         1965.60000      378.000000  \n",
       "2230           37.80000      378.000000  \n",
       "2245          299.98080      378.000000  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先查看下数据是否含有nan的数据，可以看到我们的数据中没有nan的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp            0\n",
       "Open                 0\n",
       "High                 0\n",
       "Low                  0\n",
       "Close                0\n",
       "Volume_(BTC)         0\n",
       "Volume_(Currency)    0\n",
       "Weighted_Price       0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看出现在已经没有NaN的数据了"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再查看下0数据，可以看到我们的数据中含有0值，我们需要对0值做下处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp            False\n",
       "Open                 False\n",
       "High                 False\n",
       "Low                  False\n",
       "Close                False\n",
       "Volume_(BTC)         False\n",
       "Volume_(Currency)    False\n",
       "Weighted_Price       False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(data == 0).astype(int).any()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "处理0数据的方式是使用上个列值进行前向填充"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\360Anaconda\\envs\\tf2.1\\lib\\site-packages\\pandas\\core\\generic.py:6746: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  self._update_inplace(new_data)\n",
      "E:\\360Anaconda\\envs\\tf2.1\\lib\\site-packages\\pandas\\core\\generic.py:6245: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  self._update_inplace(new_data)\n"
     ]
    }
   ],
   "source": [
    "data['Weighted_Price'].replace(0, np.nan, inplace=True)\n",
    "data['Weighted_Price'].fillna(method='ffill', inplace=True)\n",
    "data['Open'].replace(0, np.nan, inplace=True)\n",
    "data['Open'].fillna(method='ffill', inplace=True)\n",
    "data['High'].replace(0, np.nan, inplace=True)\n",
    "data['High'].fillna(method='ffill', inplace=True)\n",
    "data['Low'].replace(0, np.nan, inplace=True)\n",
    "data['Low'].fillna(method='ffill', inplace=True)\n",
    "data['Close'].replace(0, np.nan, inplace=True)\n",
    "data['Close'].fillna(method='ffill', inplace=True)\n",
    "data['Volume_(BTC)'].replace(0, np.nan, inplace=True)\n",
    "data['Volume_(BTC)'].fillna(method='ffill', inplace=True)\n",
    "data['Volume_(Currency)'].replace(0, np.nan, inplace=True)\n",
    "data['Volume_(Currency)'].fillna(method='ffill', inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp            False\n",
       "Open                 False\n",
       "High                 False\n",
       "Low                  False\n",
       "Close                False\n",
       "Volume_(BTC)         False\n",
       "Volume_(Currency)    False\n",
       "Weighted_Price       False\n",
       "dtype: bool"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(data == 0).astype(int).any()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "再看下数据的分布跟走势，这个时候曲线已经非常的连续"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(data['Weighted_Price'], label='Price')\n",
    "plt.ylabel('Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练数据集和测试数据集划分\n",
    "\n",
    "将数据归一化到0-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_set = data.drop('Timestamp', axis=1).values\n",
    "data_set = data_set.astype('float32')\n",
    "mms = MinMaxScaler(feature_range=(0, 1))\n",
    "data_set = mms.fit_transform(data_set)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以2:8划分测试数据集跟训练数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "ratio = 0.8\n",
    "train_size = int(len(data_set) * ratio)\n",
    "test_size = len(data_set) - train_size\n",
    "train, test = data_set[0:train_size,:], data_set[train_size:len(data_set),:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "创建训练数据集跟测试数据集，以1天作为窗口期来创建我们的训练数据集跟测试数据集。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_dataset(data):\n",
    "    window = 1\n",
    "    label_index = 6\n",
    "    x, y = [], []\n",
    "    for i in range(len(data) - window):\n",
    "        x.append(data[i:(i + window), :])\n",
    "        y.append(data[i + window, label_index])\n",
    "    return np.array(x), np.array(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_x, train_y = create_dataset(train)\n",
    "test_x, test_y = create_dataset(test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "loss为平均绝对误差（Mean Absolute Error，MAE）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "lstm (LSTM)                  (None, 50)                11600     \n",
      "_________________________________________________________________\n",
      "dense (Dense)                (None, 1)                 51        \n",
      "=================================================================\n",
      "Total params: 11,651\n",
      "Trainable params: 11,651\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "def create_model():\n",
    "    model = Sequential()\n",
    "    model.add(LSTM(50, input_shape=(train_x.shape[1], train_x.shape[2])))\n",
    "    model.add(Dense(1))\n",
    "    model.compile(loss='mae', optimizer='adam')\n",
    "    model.summary()\n",
    "    return model\n",
    "\n",
    "model = create_model()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里节约时间，只训练20代，利用tensorflow-gpu=2.x，其中也有Keras，使用GPU训练，会更快"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 0.0017 - val_loss: 0.0303\n",
      "Epoch 2/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 0.0014 - val_loss: 0.0188\n",
      "Epoch 3/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 0.0011 - val_loss: 0.0135\n",
      "Epoch 4/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 0.0012 - val_loss: 0.0145\n",
      "Epoch 5/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 0.0011 - val_loss: 0.0128\n",
      "Epoch 6/20\n",
      "24884/24884 [==============================] - 77s 3ms/step - loss: 0.0011 - val_loss: 0.0136\n",
      "Epoch 7/20\n",
      "24884/24884 [==============================] - 77s 3ms/step - loss: 0.0011 - val_loss: 0.0135\n",
      "Epoch 8/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 9.6527e-04 - val_loss: 0.0102\n",
      "Epoch 9/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 8.4701e-04 - val_loss: 0.0083\n",
      "Epoch 10/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 7.4637e-04 - val_loss: 0.0066\n",
      "Epoch 11/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 6.7190e-04 - val_loss: 0.0059\n",
      "Epoch 12/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 5.7592e-04 - val_loss: 0.0050\n",
      "Epoch 13/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 5.3660e-04 - val_loss: 0.0053\n",
      "Epoch 14/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 5.3742e-04 - val_loss: 0.0050\n",
      "Epoch 15/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 5.2245e-04 - val_loss: 0.0053\n",
      "Epoch 16/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 4.8314e-04 - val_loss: 0.0046\n",
      "Epoch 17/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 4.8415e-04 - val_loss: 0.0054\n",
      "Epoch 18/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 4.7891e-04 - val_loss: 0.0053\n",
      "Epoch 19/20\n",
      "24884/24884 [==============================] - 77s 3ms/step - loss: 4.6439e-04 - val_loss: 0.0048\n",
      "Epoch 20/20\n",
      "24884/24884 [==============================] - 76s 3ms/step - loss: 4.4422e-04 - val_loss: 0.0044\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(train_x, train_y, epochs=20, batch_size=64, validation_data=(test_x, test_y), verbose=1, shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD4CAYAAADlwTGnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3de3hU9b3v8fd3JjcCCAkJCuGqUgWqIkREra3WqkAvaN31qNWqtUVa6ba7tU/x7NOe9tnP2Yd2n97cbbFY2dpdq7VqW6pYsW7ZXlECReQqERECCOF+CZBk5nf++K2QYZgkEzLJSmY+r+dZz8xa67dmvmsR5jNr/dasZc45REQk90TCLkBERMKhABARyVEKABGRHKUAEBHJUQoAEZEclRd2Ae1RVlbmRowYEXYZIiI9ytKlS3c658qTp/eoABgxYgRVVVVhlyEi0qOY2fuppusQkIhIjlIAiIjkKAWAiEiO6lF9ACIi7dXQ0EBNTQ1HjhwJu5ROV1RUxJAhQ8jPz0+rvQJARLJaTU0Nffv2ZcSIEZhZ2OV0Guccu3btoqamhpEjR6a1jA4BiUhWO3LkCAMGDMjqD38AM2PAgAHt2tNRAIhI1sv2D/8m7V3PtALAzCab2TozqzazWSnmm5ndF8xfYWbjg+lFZvammb1lZqvM7PsJy5Sa2fNmtj54LGlX5e2x/nl4+ced9vIiIj1RmwFgZlHgF8AUYAxwo5mNSWo2BRgVDNOBOcH0o8DHnXPnAeOAyWY2KZg3C3jBOTcKeCEY7xwbFsGi2RBr6LS3EBFpyd69e/nlL3/Z7uWmTp3K3r17O6EiL509gIlAtXNug3OuHngMmJbUZhrwG+ctBvqb2aBg/GDQJj8YXMIyDwfPHwau6ciKtKpiAsSOwvZVnfYWIiItaSkAYrFYq8stWLCA/v37d1ZZaQVABbA5YbwmmJZWGzOLmtlyYAfwvHPujaDNqc65bQDB48BUb25m082sysyqamtr0yg31RpM8I9blp7c8iIiHTBr1izeffddxo0bxwUXXMDll1/OTTfdxDnnnAPANddcw4QJExg7dixz5849ttyIESPYuXMnGzduZPTo0Xz5y19m7NixXHXVVRw+fLjDdaVzGmiqXoXk+0i22MY5FwPGmVl/4I9m9mHn3Mp0C3TOzQXmAlRWVp7c/Sv7D4PiMtiyDC6446ReQkR6vu//ZRWrt+7P6GuOGXwK//vTY1ttM3v2bFauXMny5ctZtGgRn/zkJ1m5cuWx0zXnzZtHaWkphw8f5oILLuC6665jwIABx73G+vXrefTRR3nggQe4/vrrefLJJ7n55ps7VHs6ewA1wNCE8SHA1va2cc7tBRYBk4NJ281sEEDwuCPtqtvLzO8FaA9ARLqBiRMnHneu/n333cd5553HpEmT2Lx5M+vXrz9hmZEjRzJu3DgAJkyYwMaNGztcRzp7AEuAUWY2EtgC3ADclNRmPjDTzB4DLgT2Oee2mVk50OCc22tmvYBPAD9IWOZWYHbw+OcOr01rKibA+oVw9AAU9u3UtxKR7qmtb+pdpXfv3seeL1q0iL/97W+8/vrrFBcXc9lll6U8l7+wsPDY82g02jWHgJxzjWY2E3gOiALznHOrzGxGMP9+YAEwFagG6oDbg8UHAQ8HZxJFgMedc08H82YDj5vZHcAm4HMdXpvWVIwHHGx7C0Z8pFPfSkQkUd++fTlw4EDKefv27aOkpITi4mLWrl3L4sWLu6yutC4F4ZxbgP+QT5x2f8JzB9yVYrkVwPktvOYu4Ir2FNshg8f7xy1LFQAi0qUGDBjAJZdcwoc//GF69erFqaeeemze5MmTuf/++zn33HM566yzmDRpUiuvlFm5cy2g3gOgZIT6AUQkFL/73e9STi8sLOTZZ59NOa/pOH9ZWRkrVzafO3PPPfdkpKbcuhRExQR/JpCIiORgAOzbDAc774QjEZGeIvcCALQXICJCrgXAaeeCRdUPICJCrgVAQTEMHKMAEBEh1wIA/O8BtiwFd3JXlRARyRY5GAAT4Mhe2L0h7EpEJEec7OWgAX76059SV1eX4Yq83AwAUEewiHSZ7hoAufNDsCblZ0N+MWxdBud27tUnRETg+MtBX3nllQwcOJDHH3+co0ePcu211/L973+fQ4cOcf3111NTU0MsFuM73/kO27dvZ+vWrVx++eWUlZXx4osvZrSu3AuAaB4MOk8dwSK56NlZ8MHbmX3N086BKbNbbZJ4OeiFCxfyxBNP8Oabb+Kc4zOf+QwvvfQStbW1DB48mGeeeQbw1wjq168fP/7xj3nxxRcpKyvLbN3k4iEg8IeBtr2lW0SKSJdbuHAhCxcu5Pzzz2f8+PGsXbuW9evXc8455/C3v/2Nb3/727z88sv069ev02vJvT0A8GcCvX4Edqz2ewMikhva+KbeFZxz3Hvvvdx5550nzFu6dCkLFizg3nvv5aqrruK73/1up9aSu3sAoMNAItIlEi8HffXVVzNv3jwOHvS3S9+yZQs7duxg69atFBcXc/PNN3PPPfewbNmyE5bNtNzcA+g/HIoH+ACo/GLY1YhIlku8HPSUKVO46aabuOiiiwDo06cPv/3tb6muruZb3/oWkUiE/Px85syZA8D06dOZMmUKgwYNyngnsLke9IOoyspKV1VVlZkXe+RzsG8LfPW1zLyeiHRLa9asYfTo0WGX0WVSra+ZLXXOVSa3zc1DQOBvEFO7Bo4eDLsSEZFQ5G4AVEwAF/dnA4mI5KAcDoCEW0SKSFbrSYe6O6K965m7AdC7zHcGKwBEslpRURG7du3K+hBwzrFr1y6KiorSXiY3zwJqUjEBajLUqSwi3dKQIUOoqamhtrY27FI6XVFREUOGDEm7vQJg1VNwsBb6lIddjYh0gvz8fEaOHBl2Gd1S7h4CguZ+gK26MqiI5J7cDoBB54FF1A8gIjkprQAws8lmts7Mqs1sVor5Zmb3BfNXmNn4YPpQM3vRzNaY2Sozuzthme+Z2RYzWx4MUzO3Wmkq6K1bRIpIzmozAMwsCvwCmAKMAW40szFJzaYAo4JhOjAnmN4IfNM5NxqYBNyVtOxPnHPjgmFBx1blJOkWkSKSo9LZA5gIVDvnNjjn6oHHgGlJbaYBv3HeYqC/mQ1yzm1zzi0DcM4dANYAFRmsv+MqJsDhPbDnvbArERHpUukEQAWwOWG8hhM/xNtsY2YjgPOBNxImzwwOGc0zs5I0a84s3SJSRHJUOgFgKaYlHy9ptY2Z9QGeBL7unNsfTJ4DnAGMA7YBP0r55mbTzazKzKo65Tze8tGQ10sBICI5J50AqAGGJowPAbam28bM8vEf/o84555qauCc2+6ciznn4sAD+ENNJ3DOzXXOVTrnKsvLO+Fcfd0iUkRyVDoBsAQYZWYjzawAuAGYn9RmPvCF4GygScA+59w2MzPgQWCNc+7HiQuY2aCE0WuBlSe9Fh2lW0SKSA5qMwCcc43ATOA5fCfu4865VWY2w8xmBM0WABuAavy3+a8G0y8BbgE+nuJ0zx+a2dtmtgK4HPinjK1Ve1WMh8bDsGNNaCWIiHS1tC4FEZyiuSBp2v0Jzx1wV4rlXiF1/wDOuVvaVWlnSrxF5KBzw61FRKSL5PYvgZuUjIBepeoHEJGcogAAMPOHgbb+PexKRES6jAKgScUE2LEa6g+FXYmISJdQADTRLSJFJMcoAJoM1i0iRSS3KACa9CmH/sMUACKSMxQAiSomKABEJGcoABINHg97N8GhnWFXIiLS6RQAiXRlUBHJIQqARLpFpIjkEAVAosI+/vLQCgARyQEKgGS6RaSI5AgFQLKKCXB4N+zZGHYlIiKdSgGQrCL4QdhWdQSLSHZTACQbOAbyinQmkIhkPQVAsmi+bhEpIjlBAZBKxQTYuhxijWFXIiLSaRQAqVRM8LeIrNUtIkUkeykAUhl8vn/UYSARyWIKgFRKT4ei/uoIFpGspgBIxSy4MqgCQESylwKgJbpFpIhkOQVASyomgIvBthVhVyIi0ikUAC2p0C0iRSS7pRUAZjbZzNaZWbWZzUox38zsvmD+CjMbH0wfamYvmtkaM1tlZncnLFNqZs+b2frgsSRzq5UBfQZCv6EKABHJWm0GgJlFgV8AU4AxwI1mNiap2RRgVDBMB+YE0xuBbzrnRgOTgLsSlp0FvOCcGwW8EIx3LxXjdU0gEcla6ewBTASqnXMbnHP1wGPAtKQ204DfOG8x0N/MBjnntjnnlgE45w4Aa4CKhGUeDp4/DFzTwXXJvIoJ/qqgh3aFXYmISMalEwAVwOaE8RqaP8TTbmNmI4DzgTeCSac657YBBI8D0y26yzTdIlJ7ASKShdIJAEsxLfluKa22MbM+wJPA151z+9MvD8xsuplVmVlVbW1texbtuEHjdItIEcla6QRADTA0YXwIsDXdNmaWj//wf8Q591RCm+1mNihoMwjYkerNnXNznXOVzrnK8vLyNMrNoMI+UH62AkBEslI6AbAEGGVmI82sALgBmJ/UZj7wheBsoEnAPufcNjMz4EFgjXPuxymWuTV4fivw55Nei840WLeIFJHs1GYAOOcagZnAc/hO3Medc6vMbIaZzQiaLQA2ANXAA8BXg+mXALcAHzez5cEwNZg3G7jSzNYDVwbj3U/FeKjbBXs3hV2JiEhG5aXTyDm3AP8hnzjt/oTnDrgrxXKvkLp/AOfcLuCK9hQbiqaO4C1LoWR4uLWIiGSQfgncllPHQrRQ/QAiknUUAG05dotInQoqItlFAZCOoRP9HsDBLj4NVUSkEykA0jHhdojVw5tzw65ERCRjFADpKDsTzv4kLHlA9wcQkayhAEjXJV+Hw3vg778NuxIRkYxQAKRr6AUw7CJ47ecQawy7GhGRDlMAtMcld8O+TbD6T2FXIiLSYQqA9hh1NZSdBa/+VJeGEJEeTwHQHpEIXPw1+OBt2LAo7GpERDpEAdBe514PfU6DV38WdiUiIh2iAGivvEKY9BXY8CJseyvsakRETpoC4GRU3g4FfeG1fw+7EhGRk6YAOBlF/aDyNlj5FOx5P+xqREROigLgZF34FX+7yMW/DLsSEZGTogA4Wf0q4JzPwbLfQN3usKsREWk3BUBHXPw1aKiDJQ+GXYmISLspADri1DEw6ip4435oOBx2NSIi7aIA6KhL7oa6nbD8d2FXIiLSLgqAjhp+ib9v8Os/h3gs7GpERNKmAOgoM7j4H2H3Blj7dNjViIikTQGQCaM/DSUj4RVdJE5Eeg4FQCZEov6MoK3L4P1Xw65GRCQtCoBMGXcTFJfBq/eFXYmISFrSCgAzm2xm68ys2sxmpZhvZnZfMH+FmY1PmDfPzHaY2cqkZb5nZlvMbHkwTO346oQovxdceCesfw62rw67GhGRNrUZAGYWBX4BTAHGADea2ZikZlOAUcEwHZiTMO8hYHILL/8T59y4YFjQztq7nwu+BPnFukiciPQI6ewBTASqnXMbnHP1wGPAtKQ204DfOG8x0N/MBgE4514CcuNaCcWlcP4t8PYfYN+WsKsREWlVOgFQAWxOGK8JprW3TSozg0NG88ysJI323d9Fd4GLwxtz2m4rIhKidALAUkxLPtcxnTbJ5gBnAOOAbcCPUr652XQzqzKzqtra2rZqDV/JcBh7LVQ9BIf3hl2NiEiL0gmAGmBowvgQYOtJtDmOc267cy7mnIsDD+APNaVqN9c5V+mcqywvL0+j3G7gkn+E+gOw9D/CrkREpEXpBMASYJSZjTSzAuAGYH5Sm/nAF4KzgSYB+5xz21p70aY+gsC1wMqW2vY4g86D0y+DxfdD49GTf514DNY/D499HuZNga3LM1WhiEjbAeCcawRmAs8Ba4DHnXOrzGyGmc0Imi0ANgDV+G/zX21a3sweBV4HzjKzGjO7I5j1QzN728xWAJcD/5SpleoWLrkbDn4AKx5v/7L7t8FL/wY/GweP/ANsWuwvNfHrT8BrP4d4PPP1ikjOMdeDLl1QWVnpqqqqwi4jPc7Bry71ewBffQMibWRtPA4b/guq/gPWPQsuBiM/BhNug7M/BfUH4c8zYd0zcOYn4Jo50Gdgl6yKiPRsZrbUOVeZPD0vjGJyghlcfDc89SX/47CzpqRud+AD+PtvYdnDsHcTFA/wZxJNuA0GnNHcLq8UbngEqh6E5/4Z5lwC187xYSAichK0B9CZYg1w33h/+8gv/rV5ejwOG170ncTrnoV4I4y4FCpv99/28wpbf93tq+HJO2DHarhoJlzx3baXEZGcpT2AMETz4aKvwl9nwaY3oGQELP8tLH0Y9r7vv+1P+gqMvw3Kzkz/dU8dA1/+L1j4HX8fgo0vw3Xz2vcaIpLztAfQ2Y4ehJ+M9dcKOlTb/G1/wm3+MtId/ea+9hn4813QWA9TfwjjPu8PP2VK3W7/HtuWAwaRPH/100gULNo8btHm6ZG848ct6g9njfhI5uoSkbRpDyAshX3g0m/4s3cunOE/+MtGZe71z/4kDD4fnprug6D6BfjUT6BX/5N/zUM7/c1tVv0J3nvJd0gX9vMd2fG4H483+tNU4420/Zu/wI2PtdwXIiJdTnsA2SIeg1d/Cv/1f+CUCrju1zDswvSXP7gD1syH1X+Gja/4y1mUng5jpvlh0LiW9yyOhUIsKRyC8Vg9PHaTvz7SV16DUwalfh0R6RQt7QEoALLN5iW+g3hfDVx2r9/7iERTt92/Ddb8xX/ov/8q4GDAKBh7jf/QP/XDmTucVPsO/OqjPpRu/mPbp8WKSMYoAHLJkX3w9Ddg5RMw/CPw2bn+TCTwwdD0ob9pMeCgfHTzN/2BozPbh5Bo6UPwl7vhyn/xl8sQkS6hAMg1zsFbj8Iz9/izkS64wx/Pr1ni55/64eYP/fKzuq6mx2+BdX+FLz3v+y5EpNMpAHLVrnfhiS/6s3hOO9cf3hk9LbxTRut2+x+x5feCO1/yneQi0ql0FlCuGnCG/83A4T3QuyzsavxNcz47Fx7+tP99xLSfh12RSM5ST1wuiES7x4d/k5GX+s7pv/8nrPpj2NWI5CwFgITjsnuhYgLMv9tfA0lEupwCQMIRzfe/VXAx/yO2eCzsikRyjgJAwlN6OnzyR7DpdXg55R1BRaQTKQAkXOf+Dzjnc7Botr9gnoh0GQWAhMvM7wX0q/D3TjiyL+yKRHKGAkDCV9QPrnvQXyvo6W/4H4yJSKdTAEj3MHSiPzNo5ROw4vdhVyOSExQA0n1c+g0YdjE8803YvSHsakSyngJAuo9I1P9KOBKFJ7/kb6kpIp1GASDdS/+h8On7YMtSePFfw65GJKspAKT7GXsNnH8LvPITfwVTEekUCgDpnibP9heye+pOfwVREck4BYB0T4V9/KUiDtXC/K/p1FCRTpBWAJjZZDNbZ2bVZjYrxXwzs/uC+SvMbHzCvHlmtsPMViYtU2pmz5vZ+uCxpOOrI1ll8PlwxXf9DeqXPhR2NSJZp80AMLMo8AtgCjAGuNHMxiQ1mwKMCobpwJyEeQ8Bk1O89CzgBefcKOCFYFzkeBfNhNMvg2e/DUsf1p6ASAalswcwEah2zm1wztUDjwHTktpMA37jvMVAfzMbBOCcewlIdRB3GvBw8Pxh4JqTWQHJcpEIXDcPhl8Ef/lHeOrLcPRA2FWJZIV0AqAC2JwwXhNMa2+bZKc657YBBI8DUzUys+lmVmVmVbW1tWmUK1mn9wC4+Sm4/H/Byidh7mXwwdthVyXS46UTAJZiWvJ+eDptTopzbq5zrtI5V1leXp6Jl5SeKBKFj30Lbv0LHD0ID1wBVf+hQ0IiHZBOANQAQxPGhwBbT6JNsu1Nh4mCxx1p1CK5bsRHYMYrMPxiePrr8OQdcGR/2FWJ9EjpBMASYJSZjTSzAuAGYH5Sm/nAF4KzgSYB+5oO77RiPnBr8PxW4M/tqFtyWZ9yf0jo49/x9xSeexlsWxF2VSI9TpsB4JxrBGYCzwFrgMedc6vMbIaZzQiaLQA2ANXAA8BXm5Y3s0eB14GzzKzGzO4IZs0GrjSz9cCVwbhIeiIR+Og9cOvT0FAHv/4ELHlQh4RE2sFcD/oPU1lZ6aqqqsIuQ7qbQzv9fYXffQHGfhY+/TMoOiXsqkS6DTNb6pyrTJ6uXwJLz9e7DD7/hP/R2Oo/wdyPwba3wq5KpNtTAEh2iETg0m/Cbc9Aw5HgkNCvdUhIpBUKAMkuwy+GGS/DyI/6G8v84TbdZ1ikBQoAyT69y+CmP8Anvgdr/gK/+hhsXR52VSLdjgJAslMkAh/5J39IqPEoPHglvPbvEI+HXZlIt6EAkOw2/CL/w7Ezr4SF/wv+8xrY39ZvFEVygwJAsl/vAXDDI/700JolMOdiWK3fHYooACQ3mMGE2+DOl6FkBDz+BfjTXbqyqOQ0BYDklrIz4Y7n4dJ7YPkjcP+lsHlJ2FWJhEIBILknmg9XfAduXwDxGMy7Ghb9AGKNYVcm0qUUAJK7hl8MX3kFPnwdLPpXeGgq7H4v7KpEuowCQHJbUT+47gH47K9hxxp/SGj5o/oFseQEBYAIwLmfg6+8CqedA3+aAU/cDof3hF2VSKdSAIg06T8MbnvaX1RuzV9gziXw3kthVyXSaRQAIokiUX9RuTueh/xe8PBnYOF3oLE+7MpEMk4BIJJKxXi48yWYcCu8dh/86qPw6s9g5/qwKxPJGN0QRqQtaxf4s4Q+eNuPl54BZ03xw9BJEM0Ltz6RNrR0QxgFgEi69m6Gd/7qh/deglg9FPWHUVf6MDjzE/6sIpFuRgEgkklHD8C7LzYHQt0uiOT53xacNRU+NBlKR4ZdpQigABDpPPEY1FTBugU+DGrX+unlo+GsyfChKTCk0ncwi4RAASDSVXZvgHV/hXeehfdfg3gj9C6Hc66HcTf63xqIdCEFgEgYDu+F6r/5m9Wv+yvEG3wAnHcTnPM56FMedoWSAxQAImGr2w0rn/RXId36d99nMOpqv1cw6mrIKwi7QslSLQWAzl8T6SrFpTDxy37YsQaW/w5W/B7WPQO9Sv0ewbibYNB5/v4FmRKPQ/1BKOyb2dftCY7sg/XP+0NxZpBXBHmFEC30j03jeUnj0cR5RVDQG04ZnHXbL609ADObDPwMiAK/ds7NTppvwfypQB1wm3NuWWvLmtn3gC8DtcHL/E/n3ILW6tAegGSdWCNseNHvFaxdALGjMHCMD4Jzroe+p6b3OkcPwt73Yc/GFMP7/nWL+kPZKBgwCgac0fy89HTIL8rM+jTWw77Nwfu+11xD3R7/47rTPwbDLvIfqJ1l/zbfIb/2GX+6brwBCvv532s0HvVDvKH9r1tcBkMvhKETYdgkGHy+D4ge4KQPAZlZFHgHuBKoAZYANzrnVie0mQp8DR8AFwI/c85d2NqyQQAcdM79v3RXQgEgWe3wHlj5lN8z2FIFFvW/LRh3oz+ttG53Cx/w78Gh2uNfq/AUf+ezpqF4gA+InethVzUc2Nbc1iLQb2hzIJSdGTyOgr6Djv/W65yvM/kDfs9G2L0R9teAize3jxZCyXC/97Fthf/gjeT7D9GRH/OBUDHB36OhI3auh7VPw5qn/bYDH2xnf8oPyWdhxWNBGBzxv+doPNI83hQSx8aPwJG9ULMUNi/2nfwA0QIfAkMv9IEw9ELoXdax9egkHQmAi4DvOeeuDsbvBXDO/d+ENr8CFjnnHg3G1wGXASNaWlYBINKK2nfgrd/BW7+HAyluYm8R6Dfk+A/5khFQMtI/9ipp/XDF0QM+CHZWw671QTCsh13vQkNdc7uCPn5voe9g2L/F700c3Xf8a/Uub37fxKF0JPQ5DSLBFWfqD8Gm12HDf8N7/+0DAeffY/jFzYEwcGzzMi2Jx2HrMv+hv/YZ2PmOnz74fDj7k/5Dv/zszjlkc3AHbH7Th8GmN2Dbch8i4H8l3hQGwyZB2Ye6xWGjjgTAPwCTnXNfCsZvAS50zs1MaPM0MNs590ow/gLwbXwApFw2CIDbgP1AFfBN59wJ1981s+nAdIBhw4ZNeP/999u35iI9WTwGGxb5D86+g/yHaskI/429o9+aU75f3AdO055CUzAc+ABOqWj+YG/6kO8/HAr7nNx71e2GjS83B8Kuaj+9uAxGXtocCCUj/YdoY71vv/YZf4jnwDa/lzTiIzD60/7X2P2GZGhDtEPDEd+pv/kNP2xaDId3+3m9SpoPG512Lgwc7bdjF4dCRzqBU1WanBottWlt2TnAvwTj/wL8CPjiCY2dmwvMBb8HkEa9ItkjEoUzr/BDl7xfsGfRbwiccXnnvldxKYyZ5geAfTX+mH1TIKz6o5/eb5j/4Nz0OhzdD/nF/tDY2Z+CD13lP2TDlF8Ewy/yA/jDZLuqfRA0hcI7f21uX3iKX5+Bo/3ezsDRvt+n94AuLz2dAKgBhiaMDwGS90lbalPQ0rLOue1NE83sAeDptKsWkezTb4jv/B53k/8Q3flOcxjsWANjPgNnf9rvFeT3Crvalpn5/pOyUTD+Fj/t8B7YsRZ2rPbrsmM1rPoTLH2oebneA30YnJoQCuVnn/weVhrSCYAlwCgzGwlsAW4AbkpqMx+YaWaP4TuB9znntplZbUvLmtkg51xTT9S1wMoOr42IZAczKD/LDxdOD7uajutVcvxeAviQO7i9ORS2r/bPlz50fD9M/+E+DD72Ld9hnkFtBoBzrtHMZgLP4U/lnOecW2VmM4L59wML8GcAVeNPA729tWWDl/6hmY3DHwLaCNyZyRUTEenWzKDvaX444+PN0+Nxf8bWjtUJewxrTjzwnokS9EtgEZHs1lInsO4IJiKSoxQAIiI5SgEgIpKjFAAiIjlKASAikqMUACIiOUoBICKSoxQAIiI5SgEgIpKjFAAiIjlKASAikqMUACIiOUoBICKSoxQAIiI5Kp0bwvR4b9fsY8eBIwwrLWZoaTFF+dGwSxIRCV1OBMDv3nyfR9/cfGx8YN9ChpUWM6y0mCHBY9MwsG8hkUjX3rBZRCQMOXFDmD2H6nlv1yE2765j0646Nu32Q82ew2zdd5jETVCQF2FoSS+GJoTC0NJihpYUM6S0F6cU5WdwjUREOl9LN4TJiT2Akt4FlPQuYPywkhPmHW2MsXXvkeZQ2N0cEEs37uHA0coAhvkAAAm2SURBVMbj2p9SlMeQkmKGlPRKeOxFRTDer5cCQkR6hpwIgNYU5kUZWdabkWW9T5jnnGPf4QY27a5j8+7DbNnr9xpq9hxm465DvFK9k7r62HHL9D0uIJpDYkDvAhpijoZY/NhQH3M0NCaNx+LHptUntI/FHXkRIxqJkBc1ohELxv1jXjRy3Hg0kjAeNSLmD2u5pPU7cZ0TnifdhDRihpkRMf88kvg8QjCveZoZRM2IBDX1Lcqjb1E+fYvy6JUfxUyH2kTClPMB0Bozo39xAf2LCzh3SP8T5jvn2FPXQM2epmDwj1v2HGbTrjpeTREQ7VEQjZAfNfLzIkTMiMUdsbijMe4DoSHWcw7fJUsOhKbnpwTjpxw3zz/2Lsyjd2GU3gXNzwuiEQWJyElSAHSAmVHau4DS3i0HxN66Bmr2HGZPXT350QgFeUZ+NHJsKIhGyD9umn+eF7G0PtjicUdjUjA0jztiMUdDPE487mh+uebXTXwLOzbNTpjmgvWJO/8Yc454HOLO4Zx/jCfOjzc/jztoiMXZf6SBA0cag6HhuMf9RxrYvLvu2PODRxtJp3sqL2I+DAqi9C7Mo7gwjz6FUYoL8uhTmEdxQTR4zKNXQYReBXkU50fpVRAM+VGKC/xQlO+XKy6IUpinYJHspwDoRGZ2rP+hs0QiRsGxs5ay5/TWeNxxqL7xuMA4VB/j0NHG5iEYr6uPcfBoI3X1jRw66qftPnQ4mNfIwaONHGmIt+v9zaBXvg+IpqAozI9QmOfDwQ9N0yIU5CXOa55emBelIC9CUX7k2OsVBa/XFD5N4/lR/SxHupYCQLqlSMSCQz+Z6VSPxR2HG2IcrvdDXUNj8/P62LF5dfWNHG6Ic7i+MWl6jPpYnKONMY42xDlwpJH6xmC8Me6HBv+8MX5yh+byItYcOEEoFDWFRn4kZT9PfjSp3yepfyg/GiEaMaIZ2Jsx819qDIgYx/qDCB6N5v4fmvqBgEjEP0/un2quNZKy5sQ+rGhbp2a3Z5Nb04Md2wNO3vsNVutYOwCLEKy7X66pXy1xvGm5nrL3qACQnBCNGH0K/WGhzhaLu+PDoSHOkcYYRxqaw+ZIU7gkhFLT+JGG44PpSEOMnQcbg0N7PmAaYykO+8WaD/81xONpHUKTzpMYkoYdC8LEwGg+ieL4kyuOmx/x0/712nOYOLI0ozWm9b/BzCYDP8MfY/i1c2520nwL5k8F6oDbnHPLWlvWzEqB3wMjgI3A9c65PR1fJZFwRSN27Ft8mJL7hzr6rTSxD6ip38fhH3H4efg28WAvqKmPyPcZJQRU7MT+qsZY/Pj+q3icxiDUGuOOtqpPZ/WaQtEljLjkec6dOI3m9W5ax6ZtAH59m7aFc82v0dxH1rT9gu2TsA2P7y87fr6f55/3Lsz831ObAWBmUeAXwJVADbDEzOY751YnNJsCjAqGC4E5wIVtLDsLeME5N9vMZgXj387cqonktmztH5LMSafXaSJQ7Zzb4JyrBx4DpiW1mQb8xnmLgf5mNqiNZacBDwfPHwau6eC6iIhIO6QTABXA5oTxmmBaOm1aW/ZU59w2gOBxYKo3N7PpZlZlZlW1tbVplCsiIulIJwBSHVlL7l5qqU06y7bKOTfXOVfpnKssLy9vz6IiItKKdAKgBhiaMD4E2Jpmm9aW3R4cJiJ43JF+2SIi0lHpBMASYJSZjTSzAuAGYH5Sm/nAF8ybBOwLDuu0tux84Nbg+a3Anzu4LiIi0g5tngXknGs0s5nAc/hTCeY551aZ2Yxg/v3AAvwpoNX400Bvb23Z4KVnA4+b2R3AJuBzGV0zERFpVU7cD0BEJJe1dD8AXXxERCRH9ag9ADOrBd4/ycXLgJ0ZLCfTVF/HqL6OUX0d151rHO6cO+E0yh4VAB1hZlWpdoG6C9XXMaqvY1Rfx/WEGpPpEJCISI5SAIiI5KhcCoC5YRfQBtXXMaqvY1Rfx/WEGo+TM30AIiJyvFzaAxARkQQKABGRHJV1AWBmk81snZlVBzeaSZ5vZnZfMH+FmY3vwtqGmtmLZrbGzFaZ2d0p2lxmZvvMbHkwfLer6gvef6OZvR289wk/uw55+52VsF2Wm9l+M/t6Upsu3X5mNs/MdpjZyoRppWb2vJmtDx5LWli21b/VTqzv38xsbfDv90cz69/Csq3+LXRifd8zsy0J/4ZTW1g2rO33+4TaNprZ8haW7fTt12H+NmfZMeCvN/QucDpQALwFjElqMxV4Fn+p6knAG11Y3yBgfPC8L/BOivouA54OcRtuBMpamR/a9kvxb/0B/gcuoW0/4KPAeGBlwrQfArOC57OAH7RQf6t/q51Y31VAXvD8B6nqS+dvoRPr+x5wTxr//qFsv6T5PwK+G9b26+iQbXsAHbl7Wadzzm1zwb2SnXMHgDWceHOd7i607ZfkCuBd59zJ/jI8I5xzLwG7kyanc7e7dP5WO6U+59xC51xjMLoYf5n2ULSw/dIR2vZrYmYGXA88mun37SrZFgAduXtZlzKzEcD5wBspZl9kZm+Z2bNmNrZLC/M37FloZkvNbHqK+d1i++EvLd7Sf7wwtx+kd7e77rIdv4jfo0ulrb+FzjQzOEQ1r4VDaN1h+10KbHfOrW9hfpjbLy3ZFgAduXtZlzGzPsCTwNedc/uTZi/DH9Y4D/h34E9dWRtwiXNuPDAFuMvMPpo0vztsvwLgM8AfUswOe/ulqztsx38GGoFHWmjS1t9CZ5kDnAGMA7bhD7MkC337ATfS+rf/sLZf2rItADpy97IuYWb5+A//R5xzTyXPd87td84dDJ4vAPLNrKyr6nPObQ0edwB/xO9qJwp1+wWmAMucc9uTZ4S9/QLp3O0u7L/DW4FPAZ93wQHrZGn8LXQK59x251zMORcHHmjhfcPefnnAZ4Hft9QmrO3XHtkWAB25e1mnC44ZPgiscc79uIU2pwXtMLOJ+H+jXV1UX28z69v0HN9ZuDKpWWjbL0GL37zC3H4J0rnbXTp/q53CzCYD3wY+45yra6FNOn8LnVVfYp/StS28b2jbL/AJYK1zribVzDC3X7uE3Qud6QF/lso7+DME/jmYNgOYETw34BfB/LeByi6s7SP43dQVwPJgmJpU30xgFf6shsXAxV1Y3+nB+74V1NCttl/w/sX4D/R+CdNC2374INoGNOC/ld4BDABeANYHj6VB28HAgtb+Vruovmr88fOmv8H7k+tr6W+hi+r7z+BvawX+Q31Qd9p+wfSHmv7mEtp2+fbr6KBLQYiI5KhsOwQkIiJpUgCIiOQoBYCISI5SAIiI5CgFgIhIjlIAiIjkKAWAiEiO+v/oVVXU/DK+tQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_x, train_y = create_dataset(train)\n",
    "test_x, test_y = create_dataset(test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AKur6J49ewDIyMigf//+gHVHP3z4cPr370+bNm145ZVXXNd84oknaN++PWeffTZr1671imn+/PlMnz6d+++/n65du7JhwwaveIYNG8Ynn5S0HNSpUzIT2HPPPcfJJ59M586dGTt2bNjfs2IhTexWY4Uy+vmNv8EYa+WxJY62dAUK9W1VNc2Xo2DHH+E957Gd4AL/q2llZGTw6aefsmTJEgoLC+nevTs9evRw7T9w4AA//vgjubm5tG3blm+//ZZ27doxZMgQ3nzzTe66666Al1+zZg3ff/89hw8fpn379txyyy0sX76cKVOm+L0mwGmnncaAAQO4+OKLGThwoFc8AMOGDfN5zblz57Ju3ToWLlyIMYYBAwbw008/0a9fv2DvVpnpnX8g674Ord702wE4JW41ALec0dZntZ/aPRSWsJRSMG/ePC699FJq1apFSkoKl1zi+cm8eErntWvXkpaWRrt27QAYOnQoP/30U9DzX3TRRSQlJdG4cWOaNm3Kzp07+fnnn7n88supXbs2devWZcCAASHH62+9AHdz585l7ty5dOvWje7du7NmzRrWrVsX8jXKQm9RA5n/SvA6AMunANAh7i8A7jw7HRZ4V/t25VbC//dbqRgQ4A49UoLNS+Y+pbM/8fHxOJwr8OXmes7Em5SU5Nq22WyutvryTgNdHE/p6xpjyM/Pd20/+OCD/OMf/yjXNcpC7/wDyfy5XIfFxfn+5TipWe2KRKOUctOnTx9mzJhBbm4u2dnZzJo1y2e99PR0MjMzXVM6/+9//+P0061eeampqSxevBiATz/9NOg1+/Xrx7Rp0zh69CiHDx9mxowZPusFm/LZ/bpffPEFBQXWeKDzzjuPiRMnupaZ3Lp1K7t27QoaV3lo8g/g99SbynWciLDUcbxXeXqTWhUNSSnldPLJJzNgwAC6dOnCFVdcQc+ePX2usmW323n33Xe56qqr6NSpE3FxcYwcaS1COHbsWO6880769u2LzWYLes3u3btz9dVX07VrV6688kr69u3rs96gQYN47rnn6Natm2u9AHc333wzP/74I7169eK3335zfSo499xzueaaazj11FPp1KkTAwcOjNi6ATqlcwCjHx3DE+bVkOsfNLWp96g1n0+3UZNZYh/psf9ASlvq3xv9n0upcIiFKZ2zs7OpU6cOOTk59OvXjwkTJtC9e/eoxlQZ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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "predict = model.predict(test_x)\n",
    "plt.plot(predict, label='predict')\n",
    "plt.plot(test_y, label='ground true')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这只是作为数据分析的一个学习例子使用。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:tf2.1] *",
   "language": "python",
   "name": "conda-env-tf2.1-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
